package cz.uhk.ppro.services;

import java.security.NoSuchAlgorithmException;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;

import org.springframework.transaction.annotation.Transactional;

import cz.uhk.ppro.entities.Uzivatel;

/***
 * 
 * Zprostředkovává práci s uživately v db
 *
 */

@Transactional
public class UzivatelDbService {
	@PersistenceContext
	EntityManager em;
	
	public void pridej(String jmeno,String prijmeni, String login, String heslo, String skupina) throws NoSuchAlgorithmException{
		/**
		 * přidá uživatele
		 * parametry údaje o uživateli
		 */
			EntityManagerFactory emf = Persistence.createEntityManagerFactory("stavostroj");
			EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
			Uzivatel uz = new Uzivatel();
			uz.setHeslo(heslo);
			uz.setJmeno(jmeno);
			uz.setLogin(login);
			uz.setPrijmeni(prijmeni);
			uz.setSkupina(skupina);
			em.persist(uz);
		em.getTransaction().commit();
		em.close();
		emf.close();
	}
	
	public void uprav(Uzivatel uz, String jmeno,String prijmeni,String login,String heslo,String skupina) throws NoSuchAlgorithmException{
		/**
		 * upraví uživatele
		 * parametry uživatel k úpravě a jeho údaje
		 */
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("stavostroj");
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
			uz.setHeslo(heslo);
			uz.setJmeno(jmeno);
			uz.setLogin(login);
			uz.setPrijmeni(prijmeni);
			uz.setSkupina(skupina);
		em.merge(uz);
		em.getTransaction().commit();
		em.close();
		emf.close();
	}
	
	public void upravBezHesla(Uzivatel uz, String jmeno,String prijmeni,String login,String skupina) throws NoSuchAlgorithmException{
		/**
		 * upraví uživatele
		 * parametry uživatel k úpravě a jeho údaje
		 */
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("stavostroj");
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
			uz.setJmeno(jmeno);
			uz.setLogin(login);
			uz.setPrijmeni(prijmeni);
			uz.setSkupina(skupina);
		em.merge(uz);
		em.getTransaction().commit();
		em.close();
		emf.close();
	}
	
	public void smaz (Uzivatel uzivatel){
		/**
		 * Smaže uživatel z db
		 */
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("stavostroj");
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
			Uzivatel uzivatelx = em.find(Uzivatel.class, uzivatel.getId());
			em.remove(uzivatelx);
		em.getTransaction().commit();
		em.close();
		emf.close();
	}
	
	public List<Uzivatel> vypis (){
		/**
		 * Vypíše všechny uživatele
		 */
		@SuppressWarnings("unchecked")
		List<Uzivatel> uzivatele = em.createQuery("from Uzivatel").getResultList();
		return uzivatele;
	}
	
	public Uzivatel vrat (int id) {
		/**
		 * Vrátí uživatele s daným id
		 */
		Uzivatel uzivatel = em.find(Uzivatel.class, id);
		return uzivatel;
	}
}
